package com.gopay.solution.manager;

import java.util.List;
import java.util.Map;

import com.gopay.solution.domain.po.SolutionRuleDtl;
import com.gopay.solution.domain.po.SsApSolutionRel;
import com.gopay.solution.domain.vo.Solution;

/**
 * 账户产品与方案关系
 * @SsApSolutionRelManager.java
 * @author liujy
 * @2013-4-7 下午2:08:39  www.gopay.com.cn Inc.All rights reserved.
 */
public interface SsApSolutionManager {
    
    /**
     * 查询所有账户产品的交易方案记录
     * @return
     */
    List<SsApSolutionRel> findAllRelByTrn();

    /**
     * 查询账户产品特定方案关系
     * @param acctProdCode
     * @param solutionType
     * @return
     */
    SsApSolutionRel findRelByProdCode(String acctProdCode, String solutionType);
    
    /**
     * 查询账户产品特定方案的方案明细
     * @param solutionId
     * @param solutionType
     * @return
     */
    List<SolutionRuleDtl> findDtlsByProdCodeAndIntTxnCd(String solutionId, String solutionType);
    
    /**
     * 查询账户产品特定方案的特定交易码下的方案明细
     * @param solutionId
     * @param solutionType
     * @param gopayIntTxnCd
     * @return
     */
    List<SolutionRuleDtl> findDtlsByProdCodeAndIntTxnCd(String solutionId, String gopayIntTxnCd, String solutionType);
    
    SsApSolutionRel findRelBySoluIdAndActType(String solutionId,String solutionType);
    
    
    public List<SsApSolutionRel> findRelBySolutionType( String solutionType);
    
    
    SsApSolutionRel saveRelAndChild(SsApSolutionRel rel, Solution s);
    
    Solution saveApSolitionAndChild(Solution s, String solutionType);
    
    
    
    
    void deleteRelAndChild(SsApSolutionRel rel, String solutionType);
    
    // 删除只使用一个，关联交易码删除时，其他交易对应的方案明细数据会先加载到客户端（控制台），再由客户端修改，所以不会造成数据丢失
//    void deleteRelAndChild(SsApSolutionRel rel, String intTxnCd, String solutionType);
    
    void updateSolutionChild(Solution s, String solutionType);
    //add by wangdong 20160902 增加产品码，缓存用
    void updateSolutionChild(Solution s, String intTxnCd, String solutionType,String prodCode);

    
    Solution load(long solutionId, String solutionType);
    Solution load(long solutionId, String intTxnCd, String solutionType);
    
    
    
    /**
     * 特定银行指定付款通道是否使用
     * @param bankCode
     *          银行码
     * @param channel
     *          支付通道：1-B2C，2-B2B，3-B2C&B2B
     * @return 使用 true，否则false
     */
    boolean isBankChannelUsed(String bankCode, String channel);

	List<SsApSolutionRel> findAllRelByProdCode(String acctProdCode);
	
	public boolean delBySoluIdAndIntTxnCd(Long solutionId,String intTxnCd,String solutionType);

    /**
     * @param solutionId
     * @param intTxnCd
     * @param solutionType
     * @param prodCode
     * @return
     */
	public boolean delBySoluIdAndIntTxnCd(Long solutionId,String intTxnCd,String solutionType,String prodCode);
}
